长任务与状态
checkpoint 断点续跑、time-travel 调试、跨 session handoff 与 durable execution 如何保障长任务可靠
核心要点:
- checkpoint/resume:状态快照,崩溃后续跑
- time-travel:回历史点重跑或 fork 分支
- session 化:用 handoff artifact 跨会话续跑
- initializer + coding 两段式 harness
- durable execution:事件溯源保证多年可靠
本文讲长任务的状态管理。跨会话记忆的 handoff 文档与 compaction 见 03-记忆系统,本文聚焦执行状态的 checkpoint 与恢复。
checkpoint/resume 怎么让长任务不怕崩?
核心问题:agent 跑到一半进程挂了,怎么不从头再来?
把执行状态序列化到持久存储,崩溃后从最近快照接续。核心数据结构是 (thread_id, checkpoint_id, parent_checkpoint_id, state)——执行中途持续打快照,恢复时从最近的 checkpoint 重新接上[1]。
LangGraph 用 Postgres checkpointer 支撑并发场景,把每一步的状态落盘。这让长任务获得"断点续跑"能力:不是把整个任务重头跑一遍,而是从挂掉前的最后一个稳定状态继续。可借鉴的判断:任何会跑很久、可能中途失败的 agent,都该有 checkpoint。
time-travel 有什么用?
核心问题:checkpoint 除了崩溃恢复,还能干什么?
time-travel 让你回到任意历史 checkpoint 重跑、fork 分支或改状态后续跑[1]。它把 checkpoint 从"灾备"升级成"调试与探索"工具。
三种操作:
- replay(重放):从某个历史点重跑,观察行为。
- fork(分叉):从历史 checkpoint 创建新 thread,走不同分支。
- state editing(改状态):resume 前修改 state,纠正一个错误决策再继续。
典型用法:回到步骤 15 修正步骤 17 出错的决策,而无需重跑整个任务。可借鉴价值:checkpoint 不只防崩溃,还让"从中途换条路再试"变得廉价。
session 化怎么跨会话续跑?
核心问题:任务长到超过单次会话,状态怎么传下去?
把长任务切成多个 session,每个 session 结束生成结构化 handoff artifact,下个 session 从 artifact 恢复[2]。这避免了重放整段 token 历史。
handoff artifact 是语义层的状态摘要:已完成子任务、待办、当前决策约束。新 session 读它恢复,而非回放原始对话。这与 03-记忆系统 的 handoff 文档是同一机制的两个视角——记忆系统讲它如何承载状态,本文讲它如何支撑长任务编排。Anthropic 的数据印证:对 context anxiety 强的模型,context reset(配 handoff)比单纯 compaction 更关键。
initializer + coding 两段式是什么?
核心问题:长任务的 harness 怎么组织,才能逐 session 稳定推进?
Anthropic 的两段式:initializer 把简短 prompt 展开为 spec + 任务清单,coding agent 逐 session 增量执行[2]。两个角色分工明确。
- initializer:一次性把简短需求展开成详细 spec 和任务列表,搭好结构化环境。
- coding agent:每个 session 接收 spec + 上一轮 handoff artifact,执行一批任务,输出新 artifact。
- evaluator(可选):用测试(如 Playwright)打分验证。
跨 session 的连续性靠两条锚点:git history 记录客观代码状态,handoff artifact 记录主观决策进度。可借鉴的设计:把"规划环境"和"逐步执行"拆成两个角色,前者只跑一次、后者可重复接力。
durable execution 怎么保证可靠?
核心问题:比 checkpoint 更强的可靠性保证长什么样?
durable execution 用事件溯源(event sourcing)替代状态快照,崩溃后重放事件历史恢复[3]。Temporal 是代表:它记录每个动作的 Event History,恢复时从头重放 workflow 代码,已完成的 Activity 直接复用结果。
这套机制能保证"即使基础设施失败,workflow 仍能跑数年"。核心约束是 workflow 代码必须确定性,所有外部 I/O 封装成 Activity——这与 05-确定性workflow 的确定性要求一脉相承。它与 checkpoint 的区别:checkpoint 存"当前状态",事件溯源存"如何到达当前状态",后者恢复更稳但要求代码可重放。
Takeaway
| 知识点 | 核心结论 |
|---|---|
| checkpoint/resume | 状态快照落盘,崩溃从最近点续跑 |
| time-travel | replay / fork / 改状态,调试与换路探索 |
| session 化 | handoff artifact 承载语义状态,不重放 token 历史 |
| 两段式 harness | initializer 展开 spec,coding agent 逐 session 接力 |
| durable execution | 事件溯源 + 确定性代码,保证多年可靠 |
参考资料
- LangChain. LangGraph: Persistence and Time Travel. 2025. https://langchain-ai.github.io/langgraph/concepts/persistence/
- Anthropic. Harness design for long-running application development. 2025. https://www.anthropic.com/engineering/harness-design-long-running-apps
- Temporal. Workflows and Durable Execution. 2025. https://docs.temporal.io/workflows
延伸阅读
- 03-记忆系统/04-文件型外置记忆 — handoff 文档承载状态的记忆视角
- 05-确定性workflow — durable execution 要求的确定性